package controller

import (
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"myproject/src/model"
	"myproject/src/utils"
	"regexp"
	"strconv"
	//"myproject/src/model"
	//"myproject/src/schemas"
)

func UserRegister(userGrp *gin.RouterGroup) {
	//userGrp.Use().GET("/findUser", findUser)
	//userGrp.Use().POST("/addUser", addUser)
	userGrp.Use().POST("/addUserjson", aUser)
	userGrp.Use().GET("/send", Sendcode)
	userGrp.Use().POST("/register", reg)

}

// 发送验证码
func Sendcode(c *gin.Context) {
	// 获取参数，手机号
	mobile := c.Query("mobile")
	//验证手机好格式是否合法
	reg := "^1[3-9]{1}\\d{9}$"
	result := regexp.MustCompile(reg)
	flag := result.MatchString(mobile)
	fmt.Println(reg, "??????????????????????????????????")
	if !flag {
		c.JSON(200, gin.H{
			"code": "10011",
			"msg":  "手机号不正确",
		})
	} else {
		// 从redis中根据手机号获取验证码
		r := utils.GetRedis()
		value := r.Get(mobile)
		if value == "" {
			// 如果不存在生成随机数
			code := utils.RandInt(10000, 99999)
			codes := strconv.Itoa(code)
			// 调用发短信接口
			utils.Sendsms(mobile, codes)
			// 存入redis
			r.Setex(mobile, 60, code)
			// 返回结果
			c.JSON(200, gin.H{
				"code": "200",
				"msg":  "发送成功",
			})
		} else {
			// 如果存在直接返回不能重复发
			c.JSON(200, gin.H{
				"code": "10012",
				"msg":  "不能重复发送",
			})

		}

	}

}

// post form提交
//func addUser(c *gin.Context) {
//	addStu := &schemas.AddStu{}
//	_ = c.Bind(addStu)
//	stu := &model.Student{
//		Name: addStu.Name,
//		Age:  addStu.Age,
//	}
//	model.DB.Create(stu)
//
//	c.JSON(200, gin.H{
//		"method": "GET",
//	})
//}

// json提交
func aUser(c *gin.Context) {
	b, _ := c.GetRawData() // 从c.Request.Body读取请求数据
	// 定义map或结构体
	var m map[string]interface{}
	// 反序列化
	_ = json.Unmarshal(b, &m)
	c.JSON(200, gin.H{
		"method": "GET",
		"m":      m,
	})

}

// 注册
func reg(c *gin.Context) {
	// 获取参数
	mobile := c.PostForm("mobile")
	newcode := c.PostForm("code")
	// 验证码验证
	r := utils.GetRedis()
	code := r.Get(mobile)
	if code != newcode {
		c.JSON(200, gin.H{
			"code": "201",
			"msg":  "验证码不正确",
		})
	} else {
		// 加入数据库
		user := &model.User{
			Name:   mobile,
			Mobile: mobile,
		}
		db := model.GetDb()
		db.Create(user)
		//生成token返回
		token, _ := utils.ReleaseToken(user.ID)
		c.JSON(200, gin.H{
			"code":   "200",
			"msg":    "注册成功",
			"userid": user.ID,
			"token":  token,
		})
	}
}
